/**
 * @Copyright ®2015 Sinosoft Co. Ltd. All rights reserved.<br/>
 * 项目名称 : 电子商务云服务平台
 * 创建日期 : 2016年6月28日
 * 修改历史 : 
 *     1. [2016年6月30日]修改文件 by chihouliang
 * 添加Javadoc注释，更新代码规范，静态工具类增加private构造函数
 */
package com.gavinwind.inspay.common.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**  
 * 【Cookie操作工具】
 * @Description: Cookie的操作工具类
 * @author chenxin@sinosoft.com.cn
 * @date 2015年8月23日 下午3:09:42 
 * @version 1.0
 */
public class CookieUtil {

    private CookieUtil() {}

    /**
     * 设置cookie
     * @param cResponse 服务器响应客户端对象（HttpServletResponse）
     * @param cName  cookie名字
     * @param cValue cookie值
     * @param cMaxAge cookie生命周期  以秒为单位
     * @return Cookie对象
     */
    public static Cookie addCookie(HttpServletResponse cResponse, String cName, String cValue, int cMaxAge) {
        Cookie tCookie = new Cookie(cName, cValue);
        tCookie.setPath("/");
        if (cMaxAge > 0)
            tCookie.setMaxAge(cMaxAge);
        cResponse.addCookie(tCookie);
        return tCookie;
    }

    /**
     * 根据名字获取cookie
     * @param cRequest HttpServletRequest对象，封装HTTP请求信息
     * @param cResponse cookie名字
     * @param cName cookie名字
     * @return cookie对象
     */
    public static Cookie getCookieByName(HttpServletRequest cRequest, HttpServletResponse cResponse, String cName) {
        Map<String, Cookie> tCookieMap = readCookieMap(cRequest);
        if (tCookieMap.containsKey(cName)) {
            Cookie tCookie = (Cookie) tCookieMap.get(cName);
            return tCookie;
        } else {
            return addCookie(cResponse, cName, "", 3000);
        }
    }

    /**
     * 将cookie封装到Map里面
     * @param request
     * @return 封装后的map对象，map key保存cookie的name，map的value保存cookile中的value
     */
    private static Map<String, Cookie> readCookieMap(HttpServletRequest cRequest) {
        Map<String, Cookie> tCookieMap = new HashMap<String, Cookie>();
        Cookie[] tCookieArr = cRequest.getCookies();
        if (null != tCookieArr) {
            for (Cookie tCookie : tCookieArr) {
                tCookieMap.put(tCookie.getName(), tCookie);
            }
        }
        return tCookieMap;
    }
}